package co.yixiang.modules.activity.service.mapper;

import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.modules.activity.domain.YxStorePink;
import co.yixiang.modules.activity.service.dto.PinkDto;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * YxStorePinkMapper接口用于处理拼团活动相关的数据库操作
 * 继承自CoreMapper，用于获取拼团活动的相关数据
 */
@Repository
public interface YxStorePinkMapper extends CoreMapper<YxStorePink> {

    /**
     * 获取当前有效的拼团列表
     *
     * @param cid 商店类别ID，用于筛选拼团活动
     * @return 返回一个PinkDto对象列表，包含拼团活动的详细信息
     */
    @Select("SELECT p.id,p.uid,p.people,p.price,p.stop_time as stopTime,u.nickname,u.avatar" +
            " FROM yx_store_pink p INNER JOIN yx_user u ON u.uid=p.uid" +
            " WHERE stop_time > now() AND p.cid = #{cid} AND p.k_id = 0 " +
            "AND p.is_refund = 0 ORDER BY p.create_time DESC")
    List<PinkDto> getPinks(Long cid);

    /**
     * 获取用户可以参与的拼团列表
     *
     * @param uid 用户ID，用于排除用户自己发起的拼团
     * @return 返回一个PinkDto对象列表，包含用户可以参与的拼团活动信息
     */
    //<![CDATA[ >= ]]>
    @Select("SELECT p.id,u.nickname,u.avatar" +
            " FROM yx_store_pink p RIGHT  JOIN yx_user u ON u.uid=p.uid" +
            " where p.status= 2 AND p.uid <> ${uid} " +
            "AND p.is_refund = 0")
    List<PinkDto> getPinkOkList(Long uid);

    /**
     * 获取特定拼团的成员列表
     *
     * @param kid 拼团ID，用于筛选拼团成员
     * @return 返回一个PinkDto对象列表，包含特定拼团的成员信息
     */
    @Select("SELECT p.id,p.uid,p.people,p.price,p.stop_time as stopTime,u.nickname,u.avatar" +
            " FROM yx_store_pink p LEFT JOIN yx_user u ON u.uid=p.uid" +
            " where p.k_id= ${kid} " +
            "AND p.is_refund = 0")
    List<PinkDto> getPinkMember(int kid);

    /**
     * 获取特定拼团用户的信息
     *
     * @param id 拼团用户ID，用于筛选特定的拼团用户
     * @return 返回一个PinkDto对象，包含特定拼团用户的信息
     */
    @Select("SELECT p.id,p.uid,p.people,p.price,p.stop_time as stopTime,u.nickname,u.avatar" +
            " FROM yx_store_pink p LEFT JOIN yx_user u ON u.uid=p.uid" +
            " where p.id= ${id} ")
    PinkDto getPinkUserOne(int id);

    /**
     * 获取已完成的拼团活动的总团数
     *
     * @return 返回已完成的拼团活动的总团数
     */
    @Select("select IFNULL(sum(total_num),0) from yx_store_pink " +
            "where status=2 and is_refund=0")
    int sumNum();
}

